Skip to main content

Package Management

Package management - bu Linux tizimlarida dasturlar o'rnatish, yangilash va o'chirish uchun asosiy vosita. Har bir Linux distributionining o'ziga xos package manager'i mavjud.

Package Management Asoslari

Package Manager Turlari

# Debian/Ubuntu oilasi
apt, apt-get, dpkg # APT (Advanced Package Tool)

# Red Hat/CentOS/Fedora oilasi
yum, dnf, rpm # YUM (Yellowdog Updater Modified), DNF (Dandified YUM)

# Arch Linux oilasi
pacman # Pacman

# SUSE oilasi
zypper, rpm # Zypper

# Alpine Linux
apk # Alpine Package Keeper

# Universal package managers
snap, flatpak, appimage # Cross-distribution packages

Package Terminology

# Package - o'rnatish uchun tayyor dastur
# Repository - package'lar saqlanadigan server
# Dependencies - boshqa package'larga bog'liqlik
# Metadata - package haqida ma'lumot
# Cache - yuklab olingan package'lar saqlanadigan joy

APT (Debian/Ubuntu)

APT Asosiy Buyruqlar

# Package lists yangilash
sudo apt update # Repository ma'lumotlarini yangilash

# Package'larni yangilash
sudo apt upgrade # Barcha package'larni yangilash
sudo apt full-upgrade # System upgrade (kernel ham)
sudo apt dist-upgrade # Distribution upgrade

# Package o'rnatish
sudo apt install package_name
sudo apt install package1 package2 package3
sudo apt install ./package.deb # Local .deb file
sudo apt install package_name=version # Specific version

# Package qidirish
apt search keyword # Package qidirish
apt show package_name # Package ma'lumotlari
apt list --installed # O'rnatilgan package'lar
apt list --upgradable # Yangilanishi mumkin bo'lgan package'lar

# Package o'chirish
sudo apt remove package_name # Package o'chirish (config files qoldirish)
sudo apt purge package_name # Package va config files o'chirish
sudo apt autoremove # Kerak bo'lmagan dependencies tozalash

APT Configuration

# Repository configuration
cat /etc/apt/sources.list # Main repositories
ls /etc/apt/sources.list.d/ # Additional repositories

# Repository qo'shish
sudo add-apt-repository ppa:repository_name
sudo add-apt-repository "deb http://repository.url distribution component"

# GPG kalitlar
sudo apt-key list # GPG kalitlarni ko'rish
wget -qO- https://key.url | sudo apt-key add - # GPG kalit qo'shish

# Cache management
sudo apt clean # Package cache tozalash
sudo apt autoclean # Eski package cache tozalash
du -sh /var/cache/apt/archives/ # Cache hajmi

APT Advanced Usage

# Package dependencies
apt depends package_name # Dependencies ko'rish
apt rdepends package_name # Reverse dependencies

# Package files
dpkg -L package_name # Package fayllari
dpkg -S filename # Fayl qaysi package'ga tegishli
which command | xargs dpkg -S # Command qaysi package'da

# Package hold (yangilanishini to'xtatish)
sudo apt-mark hold package_name # Package hold
sudo apt-mark unhold package_name # Hold bekor qilish
apt-mark showhold # Hold qilingan package'lar

# Package information
apt policy package_name # Package policy va version'lar
apt-cache madison package_name # Available versions

YUM (CentOS/RHEL 7)

YUM Asosiy Buyruqlar

# Package lists yangilash
sudo yum update # Package lists va updates
sudo yum check-update # Available updates ko'rish

# Package o'rnatish
sudo yum install package_name
sudo yum install package1 package2
sudo yum localinstall package.rpm # Local RPM file
sudo yum reinstall package_name # Package'ni qayta o'rnatish

# Package qidirish
yum search keyword # Package qidirish
yum info package_name # Package ma'lumotlari
yum list installed # O'rnatilgan package'lar
yum list available # Mavjud package'lar
yum list updates # Yangilanishi mumkin

# Package o'chirish
sudo yum remove package_name # Package o'chirish
sudo yum autoremove # Orphaned packages tozalash

YUM Configuration

# Repository configuration
cat /etc/yum.conf # Main configuration
ls /etc/yum.repos.d/ # Repository files

# Repository management
sudo yum repolist # Active repositories
sudo yum repolist all # Barcha repositories
sudo yum-config-manager --enable repo_name # Repository enable
sudo yum-config-manager --disable repo_name # Repository disable

# EPEL repository (Extra Packages for Enterprise Linux)
sudo yum install epel-release # EPEL repository qo'shish

# Cache management
sudo yum clean all # Cache tozalash
sudo yum makecache # Cache rebuild

DNF (Fedora/CentOS 8+/RHEL 8+)

DNF Asosiy Buyruqlar

# Package management (YUM'ga o'xshash)
sudo dnf update # System update
sudo dnf upgrade # Alias for update
sudo dnf install package_name # Package o'rnatish
sudo dnf remove package_name # Package o'chirish
sudo dnf autoremove # Orphaned packages

# Package qidirish
dnf search keyword # Package qidirish
dnf info package_name # Package ma'lumotlari
dnf list installed # O'rnatilgan package'lar
dnf list available # Mavjud package'lar

# Group management
dnf grouplist # Available groups
sudo dnf groupinstall "Group Name" # Group o'rnatish
sudo dnf groupremove "Group Name" # Group o'chirish

# History
dnf history # Transaction history
sudo dnf history undo ID # Transaction bekor qilish
sudo dnf history redo ID # Transaction qayta qilish

DNF Advanced Features

# Module management (DNF Modules)
dnf module list # Available modules
dnf module list nodejs # Specific module versions
sudo dnf module install nodejs:14 # Module stream o'rnatish
sudo dnf module enable nodejs:14 # Module enable
sudo dnf module disable nodejs # Module disable

# Downgrade
sudo dnf downgrade package_name # Package downgrade

# Repository management
sudo dnf config-manager --add-repo https://repo.url/repo.repo
sudo dnf config-manager --enable repo_name
sudo dnf config-manager --disable repo_name

Pacman (Arch Linux)

Pacman Asosiy Buyruqlar

# System update
sudo pacman -Syu # Full system update
sudo pacman -Sy # Sync package database
sudo pacman -Su # Upgrade packages

# Package o'rnatish
sudo pacman -S package_name # Package o'rnatish
sudo pacman -S package1 package2 # Multiple packages
sudo pacman -U package.pkg.tar.xz # Local package

# Package qidirish
pacman -Ss keyword # Package qidirish
pacman -Si package_name # Package ma'lumotlari
pacman -Q # O'rnatilgan package'lar
pacman -Qs keyword # O'rnatilgan package'larda qidirish

# Package o'chirish
sudo pacman -R package_name # Package o'chirish
sudo pacman -Rs package_name # Package va dependencies
sudo pacman -Rns package_name # Recursive, nosave, dependencies
sudo pacman -Rdd package_name # Force remove (dangerous)

# Cache management
sudo pacman -Sc # Cache tozalash
sudo pacman -Scc # Full cache tozalash
paccache -r # Keep only recent packages

Pacman Advanced Usage

# Package information
pacman -Qi package_name # O'rnatilgan package info
pacman -Ql package_name # Package files
pacman -Qo filename # File owner package

# Dependencies
pacman -Qdt # Orphaned packages
sudo pacman -Rs $(pacman -Qtdq) # Remove orphans

# AUR (Arch User Repository) - yay helper
yay -S package_name # AUR package o'rnatish
yay -Syu # System va AUR update
yay -Ss keyword # AUR'da qidirish

Zypper (openSUSE)

Zypper Asosiy Buyruqlar

# Package management
sudo zypper refresh # Repository refresh
sudo zypper update # Package update
sudo zypper install package_name # Package o'rnatish
sudo zypper remove package_name # Package o'chirish

# Package qidirish
zypper search keyword # Package qidirish
zypper info package_name # Package ma'lumotlari
zypper packages --installed-only # O'rnatilgan package'lar

# Repository management
zypper repos # Repository list
sudo zypper addrepo URL alias # Repository qo'shish
sudo zypper removerepo alias # Repository o'chirish

# Pattern management (package groups)
zypper patterns # Available patterns
sudo zypper install -t pattern pattern_name

APK (Alpine Linux)

APK Asosiy Buyruqlar

# Package management
apk update # Repository index update
apk upgrade # Package upgrade
apk add package_name # Package o'rnatish
apk del package_name # Package o'chirish

# Package qidirish
apk search keyword # Package qidirish
apk info package_name # Package ma'lumotlari
apk list # Available packages
apk list -I # O'rnatilgan package'lar

# Cache management
apk cache clean # Cache tozalash
apk cache download package_name # Package download

# Virtual packages
apk add --virtual .build-deps gcc musl-dev
apk del .build-deps # Virtual package o'chirish

Universal Package Managers

Snap Packages

# Snap o'rnatish (Ubuntu'da default)
sudo apt install snapd # Debian/Ubuntu
sudo dnf install snapd # Fedora

# Snap package management
snap find keyword # Package qidirish
sudo snap install package_name # Package o'rnatish
sudo snap remove package_name # Package o'chirish
snap list # O'rnatilgan snap'lar
sudo snap refresh # Barcha snap'larni yangilash

# Channels
sudo snap install package_name --stable
sudo snap install package_name --edge
sudo snap install package_name --beta

# Classic snaps
sudo snap install --classic package_name

Flatpak

# Flatpak o'rnatish
sudo apt install flatpak # Debian/Ubuntu
sudo dnf install flatpak # Fedora

# Repository qo'shish
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# Package management
flatpak search keyword # Package qidirish
flatpak install repository package # Package o'rnatish
flatpak uninstall package # Package o'chirish
flatpak list # O'rnatilgan package'lar
flatpak update # Package'larni yangilash

# Run applications
flatpak run org.application.Name

Package Management Best Practices

1. System Update Strategy

#!/bin/bash
# system-update.sh - Safe system update script

DISTRO=$(lsb_release -si 2>/dev/null || echo "Unknown")
LOG_FILE="/var/log/system-update-$(date +%Y%m%d_%H%M%S).log"

log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Create backup before update
backup_system() {
log "Creating system backup..."
# Add your backup logic here
# For example: rsync, tar, or specialized backup tools
}

# Update based on distribution
update_system() {
case "$DISTRO" in
"Ubuntu"|"Debian")
log "Updating APT system..."
sudo apt update && sudo apt upgrade -y 2>&1 | tee -a "$LOG_FILE"
sudo apt autoremove -y 2>&1 | tee -a "$LOG_FILE"
;;
"CentOS"|"Red Hat"*)
if command -v dnf &> /dev/null; then
log "Updating DNF system..."
sudo dnf update -y 2>&1 | tee -a "$LOG_FILE"
sudo dnf autoremove -y 2>&1 | tee -a "$LOG_FILE"
else
log "Updating YUM system..."
sudo yum update -y 2>&1 | tee -a "$LOG_FILE"
fi
;;
"Fedora")
log "Updating Fedora system..."
sudo dnf update -y 2>&1 | tee -a "$LOG_FILE"
sudo dnf autoremove -y 2>&1 | tee -a "$LOG_FILE"
;;
"Arch")
log "Updating Arch system..."
sudo pacman -Syu --noconfirm 2>&1 | tee -a "$LOG_FILE"
;;
*)
log "Unknown distribution: $DISTRO"
exit 1
;;
esac
}

# Check if reboot is needed
check_reboot() {
if [ -f /var/run/reboot-required ]; then
log "Reboot required after updates"
echo "System needs to be rebooted"
elif [ -f /proc/sys/kernel/kexec_load_disabled ]; then
# Check for kernel update on other systems
log "Checking if kernel was updated..."
# Add logic to check kernel version
fi
}

# Main execution
log "Starting system update process"
backup_system
update_system
check_reboot
log "System update completed"

2. Package Audit Script

#!/bin/bash
# package-audit.sh - Package security and maintenance audit

audit_packages() {
echo "=== Package Audit Report - $(date) ==="

# Detect distribution
if command -v apt &> /dev/null; then
PKG_MGR="apt"
elif command -v dnf &> /dev/null; then
PKG_MGR="dnf"
elif command -v yum &> /dev/null; then
PKG_MGR="yum"
elif command -v pacman &> /dev/null; then
PKG_MGR="pacman"
else
echo "Unsupported package manager"
exit 1
fi

case "$PKG_MGR" in
"apt")
echo "=== Upgradable Packages ==="
apt list --upgradable 2>/dev/null | tail -n +2

echo -e "\n=== Security Updates ==="
apt list --upgradable 2>/dev/null | grep -i security

echo -e "\n=== Installed Package Count ==="
dpkg -l | grep "^ii" | wc -l

echo -e "\n=== Largest Packages ==="
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -10
;;

"dnf"|"yum")
echo "=== Available Updates ==="
$PKG_MGR check-update 2>/dev/null | grep -v "^$"

echo -e "\n=== Security Updates ==="
$PKG_MGR updateinfo list security 2>/dev/null

echo -e "\n=== Installed Package Count ==="
rpm -qa | wc -l

echo -e "\n=== Largest Packages ==="
rpm -qa --queryformat '%{SIZE} %{NAME}\n' | sort -n | tail -10
;;

"pacman")
echo "=== Available Updates ==="
pacman -Qu 2>/dev/null

echo -e "\n=== Installed Package Count ==="
pacman -Q | wc -l

echo -e "\n=== Orphaned Packages ==="
pacman -Qdt

echo -e "\n=== Largest Packages ==="
pacman -Qi | grep -E "^(Name|Installed Size)" | paste - - | sort -k4 -h | tail -10
;;
esac

# Common checks
echo -e "\n=== Failed Services (systemctl) ==="
systemctl --failed --no-legend 2>/dev/null

echo -e "\n=== Disk Usage ==="
df -h | grep -vE '^Filesystem|tmpfs|udev'
}

# Security-specific checks
security_audit() {
echo -e "\n=== Security Audit ==="

# Check for packages with known vulnerabilities
echo "=== CVE Checks ==="
if command -v debsecan &> /dev/null; then
debsecan --suite $(lsb_release -cs) --only-fixed
elif command -v yum &> /dev/null && command -v yum-security &> /dev/null; then
yum --security check-update
fi

# Check for unsigned packages
echo -e "\n=== Package Signature Verification ==="
case "$PKG_MGR" in
"apt")
# Check for packages without valid signatures
dpkg --audit
;;
"dnf"|"yum")
# Check GPG signatures
rpm --checksig -v $(rpm -qa) | grep "NOT OK" | head -10
;;
"pacman")
# Check package integrity
pacman -Qkk 2>&1 | grep warning | head -10
;;
esac
}

# Execute audits
audit_packages
security_audit

3. Repository Management

#!/bin/bash
# repo-manager.sh - Repository management script

manage_repositories() {
local action=$1
local repo_name=$2
local repo_url=$3

if command -v apt &> /dev/null; then
case "$action" in
"add")
if [[ "$repo_url" =~ ^ppa: ]]; then
sudo add-apt-repository "$repo_url" -y
else
echo "deb $repo_url" | sudo tee "/etc/apt/sources.list.d/$repo_name.list"
fi
sudo apt update
;;
"remove")
if [[ -f "/etc/apt/sources.list.d/$repo_name.list" ]]; then
sudo rm "/etc/apt/sources.list.d/$repo_name.list"
sudo apt update
else
sudo add-apt-repository --remove "$repo_name" -y
fi
;;
"list")
cat /etc/apt/sources.list
ls -la /etc/apt/sources.list.d/
;;
esac

elif command -v dnf &> /dev/null; then
case "$action" in
"add")
sudo dnf config-manager --add-repo "$repo_url"
;;
"remove")
sudo dnf config-manager --disable "$repo_name"
;;
"list")
dnf repolist
;;
esac

elif command -v pacman &> /dev/null; then
case "$action" in
"add")
echo -e "\n[$repo_name]\nServer = $repo_url" | sudo tee -a /etc/pacman.conf
sudo pacman -Sy
;;
"remove")
sudo sed -i "/\[$repo_name\]/,/^$/d" /etc/pacman.conf
;;
"list")
grep "^\[" /etc/pacman.conf
;;
esac
fi
}

# Usage examples:
# manage_repositories "add" "nodejs" "https://deb.nodesource.com/node_16.x focal main"
# manage_repositories "list"
# manage_repositories "remove" "nodejs"

4. Package Cleanup Automation

#!/bin/bash
# package-cleanup.sh - Automated package maintenance

cleanup_packages() {
echo "=== Package Cleanup - $(date) ==="

if command -v apt &> /dev/null; then
echo "Cleaning APT system..."

# Remove orphaned packages
sudo apt autoremove -y

# Clean package cache
sudo apt autoclean

# Remove old kernels (keep current + 1)
if command -v purge-old-kernels &> /dev/null; then
sudo purge-old-kernels --keep 1
fi

# Fix broken packages
sudo apt --fix-broken install -y

# Remove packages that were automatically installed but no longer needed
sudo apt autoremove --purge -y

elif command -v dnf &> /dev/null; then
echo "Cleaning DNF system..."

# Remove orphaned packages
sudo dnf autoremove -y

# Clean cache
sudo dnf clean all

# Remove old kernels
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)

elif command -v yum &> /dev/null; then
echo "Cleaning YUM system..."

# Clean cache
sudo yum clean all

# Remove orphaned packages
sudo package-cleanup --leaves --all

# Remove old kernels
sudo package-cleanup --oldkernels --count=1

elif command -v pacman &> /dev/null; then
echo "Cleaning Pacman system..."

# Remove orphaned packages
sudo pacman -Rs $(pacman -Qtdq) 2>/dev/null || true

# Clean cache
sudo pacman -Sc --noconfirm

# Clean build cache if using AUR helper
if command -v yay &> /dev/null; then
yay -Sc --noconfirm
fi
fi

echo "Package cleanup completed"
}

# Schedule cleanup (add to crontab)
# 0 2 * * 0 /usr/local/bin/package-cleanup.sh >> /var/log/package-cleanup.log 2>&1

cleanup_packages

5. Development Environment Setup

#!/bin/bash
# dev-environment-setup.sh - Development tools installation

install_development_tools() {
local profile=$1 # web, python, nodejs, java, etc.

echo "Setting up $profile development environment..."

# Detect package manager
if command -v apt &> /dev/null; then
PKG_INSTALL="sudo apt install -y"
PKG_UPDATE="sudo apt update"
elif command -v dnf &> /dev/null; then
PKG_INSTALL="sudo dnf install -y"
PKG_UPDATE="sudo dnf check-update"
elif command -v pacman &> /dev/null; then
PKG_INSTALL="sudo pacman -S --noconfirm"
PKG_UPDATE="sudo pacman -Sy"
else
echo "Unsupported package manager"
exit 1
fi

# Update package database
$PKG_UPDATE

# Common development tools
echo "Installing common development tools..."
$PKG_INSTALL git curl wget vim nano build-essential

case "$profile" in
"web")
echo "Installing web development tools..."
$PKG_INSTALL nginx apache2 mysql-server php nodejs npm
;;
"python")
echo "Installing Python development tools..."
$PKG_INSTALL python3 python3-pip python3-venv python3-dev
pip3 install virtualenv pipenv
;;
"nodejs")
echo "Installing Node.js development tools..."
# Install Node.js via NodeSource repository
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$PKG_INSTALL nodejs
npm install -g yarn pm2 nodemon
;;
"java")
echo "Installing Java development tools..."
$PKG_INSTALL openjdk-11-jdk maven gradle
;;
"docker")
echo "Installing Docker..."
# Add Docker repository and install
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
;;
"full")
echo "Installing full development stack..."
install_development_tools "web"
install_development_tools "python"
install_development_tools "nodejs"
install_development_tools "java"
install_development_tools "docker"
;;
esac

echo "$profile development environment setup completed"
}

# Usage
# install_development_tools "python"
# install_development_tools "full"

Bu tutorial package management bo'yicha barcha asosiy Linux distributionlar uchun universal ma'lumotlarni qamrab oladi. Har qanday Linux foydalanuvchisi o'z distributioniga mos qismdan foydalanishi mumkin.